table of contents
SETEUID(2) | Руководство программиста Linux | SETEUID(2) |
ИМЯ¶
seteuid, setegid - устанавливает эффективный идентификатор пользователя или группы
ОБЗОР¶
#include <sys/types.h>
#include <unistd.h>
int seteuid(uid_t euid);
int setegid(gid_t egid);
Требования
макроса
тестирования
свойств
для glibc (см.
feature_test_macros(7)):
seteuid(), setegid():
ОПИСАНИЕ¶
seteuid() устанавливает эффективный идентификатор пользователя вызывающего процесса. Непривилегированные пользовательские процессы могут менять эффективный идентификатор пользователя только на действительный, эффективный или сохранённый идентификатор пользователя.
Тоже самое справедливо при работе setegid() с "групповым" идентификатором, а не "пользовательским".
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
- EPERM
- Вызывающий процесс не имеет прав (Linux: не имеет мандата CAP_SETUID, если вызывает seteuid(), или CAP_SETGID, если вызывает setegid()) и euid (и, соответственно, egid) не является действительным, эффективным или сохранённым идентификатором пользователя (группы).
СООТВЕТСТВИЕ СТАНДАРТАМ¶
4.3BSD, POSIX.1-2001.
ЗАМЕЧАНИЯ¶
Установка эффективного идентификатора пользователя (группы) в сохранённый идентификатор пользователя (группы) возможна с версии Linux 1.1.37 (1.1.38). В других системах надо проверять _POSIX_SAVED_IDS.
В libc4, libc5 и glibc 2.0 seteuid(euid) эквивалентен setreuid(-1, euid), и поэтому может изменить сохранённый идентификатор пользователя. В glibc2.1 и новее он эквивалентен setresuid(-1, euid, -1) и поэтому изменить сохранённый идентификатор пользователя не может. Аналогичные замечания относятся и к setegid().
Согласно POSIX.1, seteuid() (setegid()) необходимо запрещать euid (egid) равный текущему эффективному идентификатору пользователя (группе), и некоторые реализации не позволяют этого.
СМОТРИТЕ ТАКЖЕ¶
geteuid(2), setresuid(2), setreuid(2), setuid(2), capabilities(7), credentials(7)
2009-10-17 | Linux |